﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Content;

namespace Projeto
{
    public class TelaIntro : Tela
    {
        

        private static int INTERVALO_TITULO = 50;

        private Texture2D textura; // Imagem de fundo da tela
        private Rectangle RetanguloJogar;
        private Rectangle RetanguloCredito;
        private Rectangle RetanguloSair;
        private MouseState oldEstadoMouse; // Último botão pressionado
        SpriteFont fonte; // Fonte do título
        SoundEffect Click; // Som do click do mouse
        Song musicaMenus; // Musica Menus
        bool tocandoMusica = false; // Booleana-gatilho para tocar música
        

        public TelaIntro(Jogo jogo)
            : base(jogo)
        {
            // Carrega a imagem de introdução
            this.textura = jogo.Content.Load<Texture2D>("Cartas/background_image");

            // Carrega fonte do título do jogo
            this.fonte = jogo.Content.Load<SpriteFont>("Fonts/gameFont");

            //Carrega efeito de Click
            this.Click = jogo.Content.Load<SoundEffect>("Som/Efeitos Sonoros/click_normal");

            // Recebe o estado do mouse
            this.oldEstadoMouse = Mouse.GetState();

            //Trilha Sonora
            musicaMenus = jogo.Content.Load<Song>("Som/Trilha Sonora/Musica_Menus");
            MediaPlayer.IsRepeating = true;

        }

        public override void Update(Microsoft.Xna.Framework.GameTime tempoJogo)
        {
            // Declara uma novo estado do mouse e recebe este estado
            KeyboardState teclado;
            MouseState keyState = Mouse.GetState();
            Vector2 posicao = new Vector2();
            teclado = Keyboard.GetState();

            if (!tocandoMusica) // Tocar música
            {
                MediaPlayer.Play(musicaMenus);
                tocandoMusica = true;
            }
            

            if (RetanguloJogar.Contains(keyState.X, keyState.Y))
            {
                posicao.X = RetanguloJogar.X - 20;
                posicao.Y = RetanguloJogar.Y;
                MouseHover("Jogar", posicao);
            }

            else if (RetanguloCredito.Contains(keyState.X, keyState.Y))
            {
                posicao.X = RetanguloCredito.X - 20;
                posicao.Y = RetanguloCredito.Y;
                MouseHover("Créditos", posicao);
            }

            else if (RetanguloSair.Contains(keyState.X, keyState.Y))
            {
                posicao.X = RetanguloSair.X - 20;
                posicao.Y = RetanguloSair.Y;
                MouseHover("Sair", posicao);
            }

            if (keyState.LeftButton == ButtonState.Pressed)
            {
                if (RetanguloJogar.Contains(keyState.X, keyState.Y))
                {
                    //TODO apenas para teste, foi comenado abaixo
                    jogo.gerenciadorTelas.MudaTela(EstadoJogo.EscolhaModo);
                    //jogo.gerenciadorTelas.MudaTela(EstadoJogo.Game);
                    Click.Play();
                }

                else if (RetanguloCredito.Contains(keyState.X, keyState.Y))
                {
                    jogo.gerenciadorTelas.MudaTela(EstadoJogo.Creditos);
                    Click.Play();
                }

                else if (RetanguloSair.Contains(keyState.X, keyState.Y))
                {
                    Click.Play();
                    jogo.Exit();
                }
            }

            this.oldEstadoMouse = keyState; // Guarda o estado passado do mouse

            base.Update(tempoJogo);
        }

        public override void Draw(Microsoft.Xna.Framework.GameTime tempoJogo)
        {
            // Desenha a tela de fundo
            spriteBatch.Draw(textura, Vector2.Zero, Color.White);

            string frase = ". :| PictuRio! |: .";

            // Desenha o título do jogo
            Vector2 posicaoTituloJogo = new Vector2(
                jogo.Window.ClientBounds.Width / 2 - fonte.MeasureString(frase).X / 2,
                jogo.Window.ClientBounds.Height / 2);

            spriteBatch.DrawString(fonte, frase, posicaoTituloJogo, Color.Navy);


            Vector2 posicaoTituloJogar = posicaoTituloJogo;
            posicaoTituloJogar.Y = posicaoTituloJogo.Y + INTERVALO_TITULO;

            spriteBatch.DrawString(fonte, "Jogar", posicaoTituloJogar, Color.Navy);

            RetanguloJogar = new Rectangle(
                (int)posicaoTituloJogar.X,
                (int)posicaoTituloJogar.Y,
                (int)fonte.MeasureString("Jogar").X,
                (int)fonte.MeasureString("Jogar").Y);


            Vector2 posicaoTituloCredito = posicaoTituloJogar;
            posicaoTituloCredito.Y = posicaoTituloJogar.Y + INTERVALO_TITULO;
            RetanguloCredito.Y = (int)(posicaoTituloJogar.Y + INTERVALO_TITULO);
            spriteBatch.DrawString(fonte, "Créditos", posicaoTituloCredito, Color.Navy);
            RetanguloCredito = new Rectangle(
                (int)posicaoTituloCredito.X,
                (int)posicaoTituloCredito.Y,
                (int)fonte.MeasureString("Creditos").X,
                (int)fonte.MeasureString("Creditos").Y);

            Vector2 posicaoTituloSair = posicaoTituloCredito;
            posicaoTituloSair.Y = posicaoTituloCredito.Y + INTERVALO_TITULO;
            RetanguloSair.Y = (int)(posicaoTituloCredito.Y + INTERVALO_TITULO);
            spriteBatch.DrawString(fonte, "Sair", posicaoTituloSair, Color.Navy);
            RetanguloSair = new Rectangle(
                (int)posicaoTituloSair.X,
                (int)posicaoTituloSair.Y,
                (int)fonte.MeasureString("Sair").X,
                (int)fonte.MeasureString("Sair").Y);


            base.Draw(tempoJogo);
        }

        private void MouseHover(string modo, Vector2 posicao)
        {
            spriteBatch.Begin();
            spriteBatch.DrawString(fonte, modo, posicao, Color.Yellow);
            spriteBatch.End();
        }
    }
}
